package leetcode.editor.cn.common;

/**
 * 链表节点
 * @author xiongjianlin
 */
public class ListNode {
    public int val;
    public ListNode next;

    public ListNode() {
    }

    public ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }

    /**
     * 通过数组创建链表
     * 示例：ListNode l1 = ListNode.create([1, 3, 5, 7])
     *
     * @param arr 整数数组，用于构建链表
     * @return 链表的头节点
     */
    public static ListNode createListNode(int[] arr) {
        if (arr == null || arr.length == 0) {
            return null; // 返回空链表表示输入数组为空或长度为0
        }

        ListNode dummyHead = new ListNode(); // 创建虚拟头节点，方便后续操作
        ListNode current = dummyHead;

        for (int value : arr) {
            current.next = new ListNode(value); // 创建新节点并将其值设置为当前数组元素
            current = current.next; // 移动到下一个节点位置
        }

        // 最后返回实际链表的头节点（即虚拟头节点的下一个节点）
        return dummyHead.next;
    }

    /**
     * 输出
     * @param node
     */
    public static void printLinkedList(ListNode node) {
        StringBuilder sb = new StringBuilder();
        while (node != null) {
            sb.append(node.val).append(" -> ");
            node = node.next;
        }
        sb.append("null");
        System.out.println(sb);
    }
}
